package com.recharge.service.httpInterFace;

import com.recharge.common.result.ResultDO;
import com.recharge.domain.query.OrderStatusQueryDO;
import com.recharge.domain.vo.GoodsChannelDO;
import com.recharge.domain.vo.ProviderApiDO;

public interface ProviderHTTPService {
    /**
     * 提交订单
     * <p>
     * success标志: 成功发送http请求并解析成功返回true, 否则为false;
     * </p>
     *
     * @param domain 商品和供应商信息
     * @return FIRST_MODEL_KEY: 请求状态(常量值类型)
     * SECOND_MODEL_KEY: 供货摘要
     * THIRD_MODEL_KEY: 上游返回信息字符串
     */
    ResultDO commitOrder(GoodsChannelDO domain);

    /**
     * 订单异步回调
     *
     * @param domain   供应商信息
     * @param paramStr 请求param参数信息
     * @param bodyStr  请求body参数信息
     * @return FIRST_MODEL_KEY: 返回上游字段值
     */
    ResultDO backOrder(ProviderApiDO domain, String paramStr, String bodyStr);

    /**
     * 订单查询
     * <p>
     * success标志: 成功发送http请求并解析成功返回true, 否则为false;
     * </p>
     *
     * @param domain 订单查询参数
     * @return FIRST_MODEL_KEY: 订单状态
     * SECOND_MODEL_KEY: 充值凭证号
     * THIRD_MODEL_KEY: 订单查询返回信息
     * FOURTH_MODEL_KEY: 如果订单有延迟可失败的则返回延迟时间(单位:分)
     */
    ResultDO queryOrder(OrderStatusQueryDO domain);

    /**
     * 余额查询
     * <p>
     * success标志: 成功发送http请求并解析成功返回true, 否则为false;
     * </p>
     *
     * @param domain 供应商信息
     * @return FIRST_MODEL_KEY: 成功返回余额,失败返回失败信息
     */
    ResultDO queryBalance(ProviderApiDO domain);

}
